/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package PanelesDePlatos;

import PanelesDeTrabajo.PanelPrincipalPlato;
import com.google.gson.Gson;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author hp
 */
public class VerPlato extends JPanel implements ActionListener
{
    private JPanel panelDatos;
    private JPanel panelTabla;
    private JPanel panelDescripcion;
    private JPanel panelFoto;
    private JLabel labelNombreBox, labelFotoVacia, labelPrecio, labelValoracion, labelIngrediente, labelPeso, labelAporteCalorico, labelDescripcion, labelRecomendacion, labelFoto;
    private JTextField textoNombre, textoPrecio, textoValoracion, textoIngrediente, textoPeso, textoAporteCalorico;
    private JTextArea areaDescripcion, areaRecomendacion;
    private JTable tabla;
    private DefaultTableModel modelo;
    private JScrollPane scroll, scrollDescripcion, scrollRecomendacion;
    private ImageIcon icon;
    private ArrayList<Plato> platos;
    private JComboBox comboBox;
    private Gson gson;
    
    public VerPlato(ArrayList<Plato> platos) 
    {
        this.platos = platos;
        this.setLayout(new BorderLayout());
        
        icon = new ImageIcon("src/Resource/sin_foto.PNG");
        ImageIcon icon2 = new ImageIcon(icon.getImage().getScaledInstance(100, 130, Image.SCALE_DEFAULT));
        
        this.panelDatos = new JPanel();
        this.panelDatos.setLayout(new MigLayout());
        
        this.panelTabla = new JPanel();
        this.panelTabla.setLayout(new MigLayout());
        
        this.panelDescripcion = new JPanel();
        this.panelDescripcion.setLayout(new MigLayout());
        
        this.panelFoto = new JPanel();
        this.panelFoto.setSize(new Dimension(10, 10));
        this.panelFoto.setLayout(new MigLayout());
        JLabel label = new JLabel(icon2);
        this.panelFoto.add(label);
        
        this.comboBox = new JComboBox();
        
        this.labelNombreBox = new JLabel("Nombre");
        this.labelPrecio = new JLabel("Precio $");
        this.labelValoracion = new JLabel("Valoración");
        this.labelIngrediente = new JLabel("Ingrediente");
        this.labelPeso = new JLabel("Peso Kg");
        this.labelAporteCalorico = new JLabel("Aporte Calórico");
        this.labelDescripcion = new JLabel("Descripción");
        this.labelRecomendacion = new JLabel("Recomendación");
        this.labelFoto = new JLabel("Imagen");
        
        this.textoNombre = new JTextField(20);
        this.textoPrecio = new JTextField(20);
        this.textoValoracion = new JTextField(20);
        this.textoIngrediente = new JTextField(20);
        this.textoPeso = new JTextField(20);
        this.textoAporteCalorico = new JTextField(20);
        
        this.textoNombre.setEditable(false);
        this.textoPrecio.setEditable(false);
        this.textoValoracion.setEditable(false);
        this.textoIngrediente.setEditable(false);
        this.textoPeso.setEditable(false);
        this.textoAporteCalorico.setEditable(false);
        
        this.areaDescripcion = new JTextArea(5, 25);
        this.areaRecomendacion = new JTextArea(5, 25);
        this.areaDescripcion.setEnabled(false);
        this.areaRecomendacion.setEnabled(false);
        
        this.modelo = new DefaultTableModel()
        {
            public boolean isCellEditable(int row, int column) //Las celdas no son editables
            {
                if (row<tabla.getRowCount())
                {
                    return false;
                }
                return true;
            }
        };
        this.tabla = new JTable(modelo);
        this.tabla.getTableHeader().setReorderingAllowed(false);
        
        this.modelo.addColumn("Nombre Ingredientes");
        this.scroll = new JScrollPane(tabla);
        this.scroll.setViewportView(tabla);
        this.scrollDescripcion = new JScrollPane(areaDescripcion);
        this.scrollRecomendacion = new JScrollPane(areaRecomendacion);
        
        this.panelDatos.add(labelNombreBox);
        this.panelDatos.add(comboBox);
//        this.panelDatos.add(textoNombre);
        this.panelDatos.add(labelValoracion);
        this.panelDatos.add(textoValoracion);
        this.panelDatos.add(labelPrecio);
        this.panelDatos.add(textoPrecio, "wrap");
        this.panelDatos.add(labelPeso);
        this.panelDatos.add(textoPeso);
        this.panelDatos.add(labelAporteCalorico);
        this.panelDatos.add(textoAporteCalorico, "wrap");
        
        this.panelTabla.add(scroll, "wrap");
        
        this.panelDescripcion.add(labelFoto, "wrap");
        this.panelDescripcion.add(panelFoto, "wrap");
        this.panelDescripcion.add(labelDescripcion, "wrap");
        this.panelDescripcion.add(scrollDescripcion, "wrap");
        this.panelDescripcion.add(labelRecomendacion, "wrap");
        this.panelDescripcion.add(scrollRecomendacion, "wrap");
        
        this.add(panelDatos, BorderLayout.NORTH);
        this.add(panelTabla, BorderLayout.WEST);
        this.add(panelDescripcion, BorderLayout.EAST);
        
        this.comboBox.addActionListener(this);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        Object click = e.getSource();
        
        if (click == comboBox)
        {
            if (comboBox.getItemCount() > 0)
            {
                String nombre = comboBox.getSelectedItem().toString();
                llenarCamposVisibles(nombre);
            }
        }
    }
    
    public void llenarTablaVisible(int indice)
    {
        while (modelo.getRowCount() > 0)
        {
            modelo.removeRow(0);
        }
        
        for (int i=0; i<platos.get(indice).getIngredientes().size(); i++)
        {
            Object[] objeto = new Object[1];
            objeto[0] = (Object)platos.get(indice).getIngredientes().get(i); //Ingrediente correspondiente al plato
            modelo.addRow(objeto);
        }
    }
    
    public void llenarCamposVisibles(String nombre)
    {
        for (int i=0; i<platos.size(); i++)
        {
            if (platos.get(i).getNombre().equals(nombre))
            {
                textoPrecio.setText(platos.get(i).getPrecio()+"");
                textoAporteCalorico.setText(platos.get(i).getAporteCalorico()+"");
                textoValoracion.setText(platos.get(i).getValoracion()+"");
                textoPeso.setText(platos.get(i).getPeso()+"");
                areaDescripcion.setText(platos.get(i).getDescripcion());
                areaRecomendacion.setText(platos.get(i).getRecomendacion());
                llenarTablaVisible(i);
                updateUI();
           }
        }
    }
    
    public void llenarComboBox()
    {
        comboBox.removeAllItems();
        
        for (int i=0; i<platos.size(); i++)
        {
            String nombre = platos.get(i).getNombre(); 
            
            if (!existeNombre(nombre)) //si no está el nombre...
            {
                comboBox.addItem(nombre);
            }
        }
    }
    
    public boolean existeNombre(String nombre)
    {
        for (int i=0; i<comboBox.getItemCount(); i++)
        {
            if (nombre.equals(comboBox.getItemAt(i).toString())) //Existe ya el nombre de plano en el comboBox?
            {
                return true;
            }
        }
        return false;
    }

    public void mostrar()
    {
        for (int i=0; i<platos.size(); i++)
        {
            System.out.println(platos.get(i).getNombre());
        }
    }
}
